package snowflake

import (
	"time"

	"github.com/bwmarrin/snowflake"
)

var node *snowflake.Node

func Init(startTime string, machineID int64) (err error) {
	var st time.Time
	// Parse 会解析一个格式化的字符串，并返回它所代表的时间值。第二个参数必须可以使用作为第一个参数提供的格式字符串（布局）进行解析
	st, err = time.Parse("2006-01-02", startTime) //定义时间因子（从哪一年开始计算，可以用69年）
	if err != nil {
		return
	}
	snowflake.Epoch = st.UnixNano() / 1000000 //初始化开始的时间
	node, err = snowflake.NewNode(machineID)  //指定机器的 ID
	return
}

func GetID() int64 {
	return node.Generate().Int64() //生成并返回唯一的 snowflake ID，并转化为 Int64 类型的值（也可以是其他类型）
}

/*func main() {
	if err := Init("2023-09-19", 1); err != nil {
		fmt.Printf("Init failed, err: %v\n", err)
		return
	}
	id := GetID()
	fmt.Println(id)
}*/
